package com.neusoft.cmsprojects.action;

import java.util.HashSet;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;

import com.neusoft.cmsprojects.model.Privilege;
import com.neusoft.cmsprojects.model.Role;
import com.neusoft.cmsprojects.model.TbUser;
import com.neusoft.cmsprojects.service.PrivilegeService;
import com.neusoft.cmsprojects.service.RoleService;
import com.neusoft.cmsprojects.service.UserService;
import com.neusoft.cmsprojects.util.ResponseUtil;
/**
 * 登录方法
 * UserAction<BR>
 * 创建人:许耀东 <BR>
 * 时间：2014年12月17日-下午2:03:18 <BR>
 * @version 1.0.0
 *
 */
public class UserAction implements RequestAware,SessionAware {

	private static final long serialVersionUID = 1L;
	
	private TbUser user;
	private Map session;
	private Map request;
	@Resource(name="userservice")
	private UserService userservice;
	
	private HttpServletResponse response;
	
	private String msg;
	
	//登陆时间
	private String logintime;
	
	//新密码
	private String newpassword;
	//原始密码
	private String oldpassword;
	
	@Resource(name="roleservice")
	private RoleService service;
	
	private Role role;
	
	private Integer[] privilegeIds;
	
	@Resource(name="privilegeservice")
	private PrivilegeService ps;
	
	/**
	 * 跳转页面防止页面的表单重复提交
	 * 方法名：index<BR>
	 * 创建人：许耀东 <BR>
	 * 时间：2014年12月17日-下午9:37:02 <BR>
	 * @return String<BR>
	 * @exception <BR>
	 */
	public String index(){
		
		return "toindex";
	}
	
	/**
	 * 跳转到修改密码的页面
	 * (这里用一句话描述这个方法的作用)<BR>
	 * 方法名：PasswordPage<BR>
	 * 创建人：许耀东 <BR>
	 * 时间：2014年12月18日-下午2:05:13 <BR>
	 * @return String<BR>
	 */
	public String passwordPage(){
		
		return "passwordPage";
	}
	/**
	 *  修改用户密码
	 * 方法名：updatePassword<BR>
	 * 创建人：许耀东 <BR>
	 * 时间：2014年12月18日-下午4:22:42 <BR>
	 * @return
	 * @throws Exception String<BR>
	 */
	public String updatePassword() throws Exception{
		response= ServletActionContext.getResponse();
		user=(TbUser) session.get("user");
		//加密
		String md5Digest=DigestUtils.md5Hex(oldpassword);
		String st=null;
		if(!md5Digest.equals(user.getCpassword())){
			 st="fail";
			 
		}else{
			user.setCpassword(DigestUtils.md5Hex(newpassword));
			userservice.merge(user);
			st="success";
		}
		ResponseUtil.write(response, st);
		return null;
	}
	/**
	 * 保存用户，在保存用户之前先确定该用户名是否已近被使用
	 * 方法名：save<BR>
	 * 创建人：许耀东 <BR>
	 * 时间：2014年12月18日-下午4:57:56 <BR>
	 * @return
	 * @throws Exception String<BR>
	 */
	public String save() throws Exception{
		response= ServletActionContext.getResponse();
		//使用md5加密
		String md5Digest=DigestUtils.md5Hex(user.getCpassword());
		user.setCpassword(md5Digest);
		Role role=new  Role();
		role.setId(user.getClevel());
		role.getUser().add(user);
		user.getRole().add(role);
		boolean bo=userservice.save(user);
		String st=null;
		if(bo){
			 st="success";
		}else{
			st="fail";
		}
		
		ResponseUtil.write(response, st);
		return null;
	}
	/**
	 * 跳转到添加数据
	 * 同时把用户信息查询出来
	 * 方法名：addPage<BR>
	 * 创建人：许耀东 <BR>
	 * 时间：2014年12月18日-下午5:24:52 <BR>
	 * @return String<BR>
	 */
	public String addPage(){
		List<Object> list=userservice.findAll();
		request.put("user", list);
		return "addPage";
	}
	
	
	/**
	 * 设置权限 
	 * 方法名：privilegePage<BR>
	 * 创建人：许耀东 <BR>
	 * 时间：2014年12月22日-上午11:35:58 <BR>
	 * @return String<BR>
	 */
	public String privilegePage(){
		Role rol=service.getById(role.getId());
		if(rol.getPrivilege()!=null){
			privilegeIds=new Integer[rol.getPrivilege().size()];
			int index=0;
			for(Privilege pri:rol.getPrivilege()){
				privilegeIds[index++]=pri.getId();
			}
		}
		request.put("role",rol);
		
		List<Privilege> list=ps.findTopPrivilege();
		request.put("topPrivilegeList", list);
		return "privilegePage";
	}
	
	/**
	 * 修改权限
	 * 方法名：updatePrivilege<BR>
	 * 创建人：许耀东 <BR>
	 * 时间：2014年12月22日-下午8:41:45 <BR>
	 * @return String<BR>
	 */
	public String updatePrivilege(){
		Role rl=service.getById(role.getId());
		
		int i=privilegeIds[1];
		System.out.println(i);
		List<Privilege> privilegeList=ps.getByIds(privilegeIds);
		rl.setPrivilege(new HashSet<Privilege>(privilegeList));
		//更新到数据库
		service.update(rl);
		request.put("role", rl);
		//重新登录
		session.remove("user");
		return "privilege";
	}
	
	/**
	 * 用户管理；超级管理员、普通用户
	 * 方法名：getUser<BR>
	 * 创建人：许耀东 <BR>
	 * 时间：2014年12月22日-下午2:43:12 <BR>
	 * @return TbUser<BR>
	 */
	public String list(){
		List<Object> list=service.finAll();
		request.put("role", list);
		return "list";
	}
	
	
	
	//更新页面
	public String updatePage(){
		user=userservice.findById(user.getCid());
		request.put("user", user);
		return "updatePage";
	}
	
	//更新数据
	public String update() throws Exception{
		response= ServletActionContext.getResponse();
		System.out.println(user.getCid());
		Role role=new Role();
		role.setId(user.getClevel());
		role.getUser().add(user);
		user.getRole().add(role);
		userservice.update(user);
		
		session.put("user", user);
		ResponseUtil.write(response, "success");
		return null;
	}
	//删除数据
	public String delete() throws Exception{
		response= ServletActionContext.getResponse();
		userservice.delete(user);
		ResponseUtil.write(response, "success");
		return null;
	}
	
	
	
	//setter getter
	public TbUser getUser() {
		return user;
	}
	public void setUser(TbUser user) {
		this.user = user;
	}
	public HttpServletResponse getResponse() {
		return response;
	}
	public void setResponse(HttpServletResponse response) {
		this.response = response;
	}
	@Override
	public void setSession(Map session) {
		this.session=session;
	}
	@Override
	public void setRequest(Map  request) {
		this.request=request;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	public String getLogintime() {
		return logintime;
	}

	public void setLogintime(String logintime) {
		this.logintime = logintime;
	}

	public String getNewpassword() {
		return newpassword;
	}

	public void setNewpassword(String newpassword) {
		this.newpassword = newpassword;
	}

	public String getOldpassword() {
		return oldpassword;
	}

	public void setOldpassword(String oldpassword) {
		this.oldpassword = oldpassword;
	}

	public Role getRole() {
		return role;
	}

	public void setRole(Role role) {
		this.role = role;
	}

	public Integer[] getPrivilegeIds() {
		return privilegeIds;
	}

	public void setPrivilegeIds(Integer[] privilegeIds) {
		this.privilegeIds = privilegeIds;
	}

}
